<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    function Star(name,age){
       
        this.name = name
        this.age = age
        this.sing = function(){
            console.log(this.name+'会唱歌');
        }
        // console.log(this);//指向实例化出来的对象
    }
    let ldh = new Star('刘德华',18)
    let zxy = new Star('张学友',19)
    console.log(ldh);
    console.log(zxy);
    // console.dir(Star);
    Star.prototype.dance = function(){
        console.log('跳舞');
    }
    Star.prototype.sex = '男'
    ldh.dance()
    zxy.dance()
    console.log(ldh.sex);
    console.log(zxy.sex);
    // 每一个构造函数都有一个原型 prototype ,定义在原型上的方法和属性  所有的实例都可以共享

    // __proto__  隐式原型    prototype   constructor
    // 1.  实例对象的__proto__ 等于 构造函数的prototype
    console.log(ldh.__proto__ === Star.prototype);
    
//    2. 实例对象隐式原型上的constructor 等于构造函数本身
    console.log(ldh.__proto__.constructor === Star);
    // 3.原型对象上的constructor 指向原型对象对应的构造函数本身
    console.log(Star.prototype.constructor == Star);



</script>
</html>